libxc: maintain a small, per-handle, cache of hypercall buffer memory
authorIan Campbell <ian.campbell@citrix.com>
Tue, 1 Feb 2011 19:26:36 +0000 (19:26 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Tue, 1 Feb 2011 19:26:36 +0000 (19:26 +0000)
commit04d1f61a1fd9e86f4aafc6333b223b736a488b58
tree7d595ae7fa88ca36c3967f733c19e02d7fa39395
parent3ddd6a650bd220252584fdd111fa284ed062363b
libxc: maintain a small, per-handle, cache of hypercall buffer memory

Constantly m(un)locking memory can have significant overhead on
systems with large numbers of CPUs. This was previously fixed by
20841:fbe8f32fa257 but this was dropped during the transition to
hypercall buffers.

Introduce a small cache of single page hypercall buffer allocations
which can be resused to avoid this overhead.

Add some statistics tracking to the hypercall buffer allocations.

The cache size of 4 was chosen based on these statistics since they
indicated that 2 pages was sufficient to satisfy all concurrent single
page hypercall buffer allocations seen during "xl create", "xl
shutdown" and "xl destroy" of both a PV and HVM guest therefore 4
pages should cover the majority of important cases.

This fixes http://bugzilla.xensource.com/bugzilla/show_bug.cgi?id=1719.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Reported-by: Zheng, Shaohui <shaohui.zheng@intel.com>
Tested-by: Haitao Shan <maillists.shan@gmail.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/libxc/xc_hcall_buf.c
tools/libxc/xc_private.c
tools/libxc/xc_private.h